import java.awt.GridLayout;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

/**
 * @author Krzych
 *
 */
public class CPlayer extends JFrame implements ActionListener 
{
	JTextField pole,pole2;
	JButton przycisk,przycisk2,przycisk3;
	JLabel wyniki;
	Socket socket = null;
	PrintWriter dane_wychodzace = null;
	BufferedReader dane_przychodzace = null;
	JLabel wynik[],polecenie2;
	
	/**
	 * Konstruktor tworzy proste okienko 
	 */
	CPlayer() {
		super ("Program");
		setBounds (200, 200, 300, 400);
		setLayout (new GridLayout (15 , 1));
		przycisk = new JButton ("Nowa gra");
		przycisk.addActionListener (this);
		add (przycisk);
		JLabel polecenie2 = new JLabel ("Wpisz ile botow,graczy");
		add(polecenie2);
		pole2 = new JTextField();
		add (pole2);
		przycisk3 = new JButton ("Wyslij");
		przycisk3.addActionListener (this);
		add (przycisk3);
		przycisk3.setEnabled(false);
		
		wynik = new JLabel[5];
		for ( int x = 0 ; x < 5 ; x++ ) {
			wynik[x] = new JLabel ();
			add (wynik[x]);
		}
		JLabel polecenie = new JLabel ("Wpisz karty do wymiany");
		add (polecenie);
		pole = new JTextField();
		add (pole);
		pole.setEnabled(false);
		pole2.setEnabled(false);
		przycisk2 = new JButton ("Zmien karty");
		przycisk2.addActionListener (this);
		add (przycisk2);
		 przycisk2.setEnabled(false);
		 przycisk3 = new JButton ("Sprawdz");
		 przycisk3.addActionListener (this);
		 add (przycisk3);
		przycisk3.setEnabled(false);
		setVisible (true);
    	setResizable (false);
	}
	
	/**
	 * Metoda wysyla dane do serwera oraz odbiera i wyswietla wyniki 
	 */
	public void actionPerformed (ActionEvent akcja) {
		if (akcja.getSource() == przycisk) {
			try {
				for(int i=0;i<5;i++)
				wynik[i].setText (dane_przychodzace.readLine());
			}
			catch (IOException e) {
				System.out.println ("Read failed"); 
				System.exit (1);
			}
			przycisk.setEnabled(false);
			przycisk2.setEnabled(true);
			pole.setEnabled(true);
			
		}
		
		if (akcja.getSource() == przycisk2) {
			dane_wychodzace.println ("2,"+pole.getText());
			try {
				for(int i=0;i<5;i++)
				wynik[i].setText (dane_przychodzace.readLine());
			}
			catch (IOException e) {
				System.out.println ("Read failed"); 
				System.exit (1);
			}
			przycisk2.setEnabled(false);
			przycisk3.setEnabled(true);	
			pole.setEnabled(false);
		}
		
		if (akcja.getSource() == przycisk3) {
			dane_wychodzace.println ("3,");
			try {
			wynik[0].setText (dane_przychodzace.readLine());
			}
			catch (IOException e) {
				System.out.println ("Read failed"); 
				System.exit (1);
			}
			
		}
	}
	
	/**
	 * Klient laczy sie z serwerem o podanym ip oraz portem
	 * @param ip IP serwer
	 * @param port Port na ktorym dziala serwer 
	 */
	public void listenSocket(String ip,int port) {
		try {
			socket = new Socket (ip, port);
			dane_wychodzace = new PrintWriter (socket.getOutputStream(), true);
			dane_przychodzace = new BufferedReader (new InputStreamReader (socket.getInputStream()));
			
		}
		catch (UnknownHostException e) {
			System.out.println ("Unknown host"); 
			System.exit(1);
		}
		catch  (IOException e) {
			System.out.println ("No I/O"); 
			System.exit(1);
		}
	}

	/**
	 * Wlaczanie poloczenia z serwerem 
	 */
	public static void main (String []args) {  
		CPlayer klient = new CPlayer();
        int port=5555;
        String ip="localhost";
        if(args.length>0)
        {
           ip=args[0];
        }
        if (args.length > 1) 
        {
          try
          {
		    port=Integer.parseInt(args[1]);
          }
          catch (NumberFormatException ex)
          {
             System.out.println("Podany port nie jest liczba, serwer dziala na domyslnym porcie 5555");
          }
        }
		klient.listenSocket(ip,port);
	}
}
